package site.sorghum.ddl.compare;

import lombok.RequiredArgsConstructor;
import site.sorghum.ddl.entity.DdlColumnWrap;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 列比较器
 *
 * @author sorghum
 */
@RequiredArgsConstructor
public class ColumnCompare {

    /**
     * 比较返回新增的列
     *
     * @return 新增的列
     */
    public static List<DdlColumnWrap> compare(List<DdlColumnWrap> javaDdlColumnWraps, List<DdlColumnWrap> dbDdlColumnWraps) {
        // 如果数据库中没有列，则所有新列都是新增的
        if (dbDdlColumnWraps == null || dbDdlColumnWraps.isEmpty()) {
            return new ArrayList<>(javaDdlColumnWraps);
        }

        // 如果新列列表为空，则没有新增列
        if (javaDdlColumnWraps == null || javaDdlColumnWraps.isEmpty()) {
            return new ArrayList<>();
        }

        // 获取数据库列名集合
        List<String> dbColumnNames = dbDdlColumnWraps.stream()
                .map(DdlColumnWrap::getName)
                .collect(Collectors.toList());

        // 筛选出新列中不在数据库列中的列
        return javaDdlColumnWraps.stream()
                .filter(column -> {
                    // column去除前后的符号位 防止如 `name` `sort`之类的影响

                    return !dbColumnNames.contains(column.getName());
                })
                .collect(Collectors.toList());
    }


}